home *** CD-ROM | disk | FTP | other *** search
/ com!online 2005 May / com_0505_1.iso / opensource / top10 / amc_install.exe / {app} / Scripts / KwCinema (IT).ifs < prev    next >
Encoding:
Text File  |  2004-10-12  |  9.9 KB  |  337 lines

  1. // GETINFO SCRIPTING
  2. // KwCinema (IT) by SM
  3.  
  4. (**************************************************
  5. *  Movie importation script for:                  *
  6. *      KwCinema - http://www.kataweb.it/cinema    *
  7. *  Ver. 1.0.2 - 26.09.2004                        *
  8. *  Stefano Mora - stefano.mora@libero.it          *
  9. *                                                 *
  10. *  For use with Ant Movie Catalog 3.4.2           *
  11. *  www.ant.be.tf/moviecatalog ╖╖╖ www.buypin.com  *
  12. *                                                 *
  13. *  The source code of the script can be used in   *
  14. *  another program only if full credits to        *
  15. *  script author and a link to Ant Movie Catalog  *
  16. *  website are given in the About box or in       *
  17. *  the documentation of the program               *
  18. ***************************************************)
  19.  
  20. program KwCinemaIt;
  21.  
  22. var
  23.  MovieName: string;
  24.  
  25. const
  26.   PATHLOG = 'c:\Programmi\Ant Movie Catalog\Log\LogKwCinema\';
  27.  
  28. function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  29. var
  30.   i: Integer;
  31. begin
  32.   result := -1;
  33.   if StartAt < 0 then
  34.     StartAt := 0;
  35.   for i := StartAt to List.Count-1 do
  36.     if Pos(Pattern, List.GetString(i)) <> 0 then
  37.     begin
  38.       result := i;
  39.       Break;
  40.     end;
  41. end;
  42.  
  43. // --------------------------------------------------
  44.  
  45. // Analizza la pagina e ricava i dati
  46. procedure LeggeFilm(Page: TStringList);
  47. var
  48.   strTmp, strTmp2, strTmp3: string;
  49.   LineNr: integer;
  50.   EndLine: integer;
  51.   BeginPos, EndPos: Integer;
  52.   bNome: boolean;
  53. begin
  54.  
  55. // Titoli
  56.   LineNr := FindLine('box-tit-film', Page, 0);
  57.   strTmp := Page.GetString(LineNr);
  58.   HTMLRemoveTags(strTmp);
  59.   // Titolo originale === titolo tradotto
  60.   SetField( fieldTranslatedTitle, strTmp);
  61.   SetField( fieldOriginalTitle, strTmp);
  62.  
  63. // Immagine - Locandina
  64.   LineNr := FindLine('<div class="box-grigio">', Page, LineNr);
  65.   if LineNr <> -1 then
  66.     begin
  67.     strTmp := Page.GetString(LineNr+1);
  68.     BeginPos := pos('assente.gif', strTmp); // Verifica che ci sia l'immagine
  69.     if BeginPos=0 then
  70.       begin
  71.         BeginPos := pos('src="', strTmp)+4;
  72.         delete( strTmp, 1, BeginPos);   // cancella per poter trovare l'altro '"'
  73.         BeginPos := pos('"', strTmp)-1;
  74.         strTmp := copy( strTmp, 1, BeginPos);
  75.         GetPicture(strTmp, FALSE);  // Richiede l'immagine
  76.         end
  77.     end
  78.   
  79. // Cast
  80.   LineNr := FindLine('<div class="header-tit-int">Cast</div>', Page, LineNr);
  81.   if LineNr <> -1 then
  82.     begin
  83.     EndLine := FindLine('<div class="row"> </div>', Page, LineNr)-2;
  84.     strTmp :='';
  85.     while LineNr<EndLine do
  86.       begin
  87.       bNome := false;
  88.       // Controlla se deve aggiungere una virgola tra i nomi
  89.       if strTmp<>'' then strTmp := strTmp+', ';
  90.  
  91.       LineNr :=  LineNr+2;
  92.       strTmp2 := Page.GetString(LineNr);
  93.  
  94.       // Controlla se c'e' grassetto -> nome personaggio
  95.       BeginPos := pos('<b>', strTmp2)+3;
  96.       EndPos := pos('</b>', strTmp2);
  97.       if EndPos-BeginPos > 1 then
  98.         begin
  99.         strTmp3 := copy( strTmp2, BeginPos, EndPos-BeginPos);
  100.         strTmp := strTmp + strTmp3;
  101.         bNome := true;
  102.         end;
  103.       if bNome then strTmp := strTmp + ' (';
  104.       
  105.       // Estrae il nome
  106.       delete( strTmp2, 1, EndPos+3);
  107.       HTMLRemoveTags(strTmp2);
  108.       strTmp := strTmp + strTmp2;
  109.  
  110.       if bNome then strTmp := strTmp + ')';
  111.       end;
  112.     SetField( fieldActors, strTmp);
  113.     end;
  114.  
  115. // Descrizione
  116.   strTmp:='';
  117.   LineNr := FindLine('Trama', Page, LineNr)+2;
  118.   EndLine := FindLine('<div class="row"> </div>', Page, LineNr);
  119.   // Colleziona tutte le righe di descrizione
  120.   while LineNr<EndLine do
  121.   begin
  122.     strTmp2 := Page.GetString(LineNr);
  123.     // Potrebbe esserci l'immagine del Morandini
  124.     HTMLRemoveTags(strTmp2);
  125.     strTmp2 := StringReplace(strTmp2, #9, '');  // Toglie i tabs
  126.     strTmp2 := trim(strTmp2);
  127.     if strTmp2 <> '' then strTmp := strTmp + strTmp2 +  ' ';
  128.     LineNr := LineNr+1;
  129.   end;
  130.   HTMLRemoveTags(strTmp);
  131.   SetField( fieldDescription, strTmp);
  132.  
  133. // Anno
  134.   LineNr := FindLine('Anno', Page, LineNr);
  135.   strTmp := Page.GetString(LineNr);
  136.   BeginPos := Pos('</b>', strTmp)+4;
  137.   EndPos := Pos('</p>', strTmp);
  138.   strTmp := copy( strTmp, BeginPos, EndPos-BeginPos);
  139.   SetField( fieldYear, strTmp);
  140.  
  141. // Nazione
  142.   LineNr := FindLine('Nazione', Page, LineNr);
  143.   strTmp := Page.GetString(LineNr);
  144.   BeginPos := Pos('</b>', strTmp)+4;
  145.   EndPos := Pos('</p>', strTmp);
  146.   strTmp := copy( strTmp, BeginPos, EndPos-BeginPos);
  147.   SetField( fieldCountry, strTmp);
  148.  
  149. // Produzione
  150.   LineNr := FindLine('Produzione', Page, LineNr);
  151.   strTmp := Page.GetString(LineNr);
  152.   BeginPos := Pos('</b>', strTmp)+4;
  153.   EndPos := Pos('</SP>', strTmp);     // qui nella pagina c'e' un </SP> !!
  154.   strTmp := copy( strTmp, BeginPos, EndPos-BeginPos);
  155.   SetField( fieldProducer, strTmp);
  156.  
  157. // Durata
  158.   LineNr := FindLine('Durata', Page, LineNr);
  159.   strTmp := Page.GetString(LineNr);
  160.   BeginPos := Pos('</b>', strTmp)+4;
  161.   EndPos := Pos('''</p>', strTmp);
  162.   strTmp := copy( strTmp, BeginPos, EndPos-BeginPos);
  163.   //ShowMessage(strTmp);
  164.   SetField( fieldLength, strTmp);
  165.  
  166. // Genere
  167.   LineNr := FindLine('Genere', Page, LineNr);
  168.   strTmp := Page.GetString(LineNr);
  169.   BeginPos := Pos('</b>', strTmp)+4;
  170.   EndPos := Pos('</p>', strTmp);
  171.   strTmp := copy( strTmp, BeginPos, EndPos-BeginPos);
  172.   //ShowMessage(strTmp);
  173.   SetField( fieldCategory, trim(strTmp));
  174.  
  175. // Regia
  176.   LineNr := FindLine('Regia', Page, LineNr);
  177.   EndLine := FindLine('<div class="row"> </div>', Page, LineNr);
  178.   strTmp := Page.GetString(LineNr);
  179.   BeginPos := pos('ia:', strTmp)+2;
  180.   Delete(strTmp, 1, BeginPos);
  181.   //ShowMessage(strTmp);
  182.   LineNr := LineNr+1;
  183.   //while LineNr<EndLine do
  184.   //  begin
  185.   //  strTmp := strTmp + trim(Page.GetString(LineNr)) +  ' ';
  186.   //  LineNr := LineNr+1;
  187.   //  end;
  188.   HTMLRemoveTags(strTmp);
  189.   //ShowMessage(strTmp);
  190.   SetField( fieldDirector, trim(strTmp));
  191.  
  192. // Link
  193.   LineNr := FindLine('Link:', Page, LineNr);
  194.   if LineNr<>-1 then
  195.     begin
  196.     strTmp := Page.GetString(LineNr+1);
  197.     if (strTmp = '') then strTmp := Page.GetString(LineNr+2);
  198.     if (strTmp = '') then strTmp := Page.GetString(LineNr+3);
  199.     BeginPos := pos('href="', strTmp)+6;
  200.     EndPos := pos('" ', strTmp);
  201.     strTmp := copy( strTmp, BeginPos, EndPos-BeginPos);
  202.     SetField( fieldURL, strTmp);
  203.     end
  204.  
  205.   // Si sposta nella pagina dei risultati
  206.   DisplayResults;
  207. end;
  208.  
  209. // ---
  210.  
  211. procedure AnalyzePage(Address: string);
  212.  
  213. var
  214.   Page: TStringList;
  215.   strPage, MovieAddr, MovieTitle : string;
  216.   BeginPos, EndPos: Integer;
  217.   
  218.   LineNr: Integer;
  219.   rigalista: string;
  220.   rigahtml: string;
  221.   strTmp: string;
  222.   altrapagina: string;
  223.  
  224. begin
  225.   // Crea la lista
  226.   Page:= TStringList.Create;
  227.   
  228.   // Riceve la pagina
  229.   Page.Text := GetPage(Address);
  230.   //Page.LoadFromFile(PATHLOG+'il colpo.res');
  231.  
  232.   BeginPos:= FindLine('Nessun film trovato', Page, 0);
  233.   if BeginPos <> -1 then
  234.     begin
  235.     ShowMessage('Film non trovato !');
  236.     exit;
  237.     end;
  238.  
  239.   // Controllare che ci siano film !!
  240.   BeginPos:= FindLine('<div class="header-tit-int">Hai cercato <i>', Page, 0);
  241.   if(BeginPos = -1) then
  242.     begin
  243.     // Trovato il film
  244.     LeggeFilm(Page);
  245.     end
  246.  
  247.   else  // Lista di film
  248.  
  249.     begin
  250.  
  251.     // Salva la pagina per debug
  252.     //Page.SaveToFile(PATHLOG+MovieName+'.res');
  253.  
  254.     PickTreeClear;
  255.     PickTreeAdd('Risultati ricerca per "' + MovieName + '":', '');
  256.  
  257.     LineNr := FindLine('<td><b><a href="', Page, BeginPos);
  258.     while LineNr <> -1 do
  259.       begin
  260.  
  261.       // Riga con indirizzo e titolo del film
  262.       rigahtml:= Page.GetString(LineNr);
  263.  
  264.       BeginPos:= pos('href="', rigahtml)+6;
  265.       EndPos:= pos('" >', rigahtml);
  266.       MovieAddr:= copy( rigahtml, BeginPos, EndPos-BeginPos);
  267.  
  268.       BeginPos:= EndPos+3;
  269.       EndPos:= pos('</a></b>', rigahtml);
  270.       MovieTitle:= copy( rigahtml, BeginPos, EndPos-BeginPos);
  271.  
  272.       // Legge l'anno
  273.       strTmp := Page.GetString(LineNr+1);
  274.       HTMLRemoveTags(strTmp);
  275.       MovieTitle := MovieTitle + ' [' + trim(strTmp) + '] ';
  276.  
  277.       // Legge il regista
  278.       strTmp := Page.GetString(LineNr+2);
  279.       HTMLRemoveTags(strTmp);
  280.       //ShowMessage(strTmp);
  281.       MovieTitle := MovieTitle + trim(strTmp);
  282.  
  283.       // Add to listbox
  284.       PickTreeAdd(MovieTitle, MovieAddr);
  285.  
  286.       // Restart the process
  287.       LineNr := LineNr+2;
  288.       LineNr := FindLine('<td><b><a href="', Page, LineNr);
  289.       end;
  290.  
  291.       // Controlla se ci sono altre pagine di risultati
  292.       LineNr := FindLine('>Avanti<', Page, LineNr);
  293.       if LineNr <> -1 then
  294.         begin
  295.         PickTreeAdd('Ci sono altre pagine risultato ...', '');
  296.         
  297.         // Estrae l'indirizzo per un'altra pagina
  298.         strTmp := Page.GetString(LineNr);
  299.         BeginPos := pos('href="', strTmp)+6;
  300.         EndPos := pos('" id=', strTmp);
  301.         altrapagina := copy( strTmp, BeginPos, EndPos-BeginPos);
  302.         //ShowMessage(altrapagina);
  303.         end;
  304.  
  305.       // Visualizza la lista e fa scegliere
  306.       if(PickTreeExec(Address)) then
  307.         begin
  308.         Address := 'http://www.kataweb.it'+Address;
  309.         Page.text := GetPage(Address);
  310.  
  311.         // Salva la pagina per debug
  312.             //Page.SaveToFile(PATHLOG+MovieName+'.film');
  313.  
  314.         LeggeFilm(Page);
  315.         end;
  316.     end;
  317.   Page.Free();
  318. end;
  319.  
  320. // -------------------- main
  321.  
  322. begin
  323.   if CheckVersion(3,4,2) then
  324.   begin
  325.     // Considera il titolo tradotto, se vuoto il titolo originale
  326.     MovieName := GetField(fieldTranslatedTitle);
  327.     if MovieName = '' then MovieName := GetField(fieldOriginalTitle);
  328.     // Chiede conferma del titolo
  329.     Input('KwCinema Import', 'Titolo del film:', MovieName);
  330.     if MovieName <> '' then
  331.     begin
  332.       AnalyzePage('http://www.kataweb.it/cinema/cerca.jsp?textfield='+ UrlEncode(MovieName) +'&select=film');
  333.     end;
  334.   end else
  335.     ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.4.2)');
  336. end.
  337.